home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2008 September
/
PCWorld_2008-09_cd.bin
/
v cisle
/
sadanastroju
/
IE7proSetup_2.3.exe
/
plugins
/
searchstatus
/
plugin.js
Wrap
Text File
|
2007-11-20
|
9KB
|
353 lines
// ==UserScript==
// @name Alexa rank/google pagerank
// @namespace http://iescripts.org
// @description Display the website' Alexa and Google Page Rank. (Thanks to SearchStatus of FireFox)
// @statussize 160
// ==/UserScript==
(function()
{
var plugin = PRO_plugin(@name);
plugin.onpagechange = handlePageChange;
plugin.registerContextMenu("Show Google results from this site", menuShowGoogleResult);
plugin.registerContextMenu("Show Google Related Site", menuShowGoogleRelated);
plugin.registerContextMenu("Show Alexa Overview", menuShowAlexaOverview);
plugin.registerContextMenu("Show Alexa Traffic Detail", menuShowAlexaTraffic);
var gCookie = "";
var gAlexaRank = "";
var gGoogleRank = "";
var reqObj = new Object();
reqObj.request = function(callback, cookie, url, userAgent, lastModify) {
var req;
req = PRO_xmlhttpRequest();
req.onreadystatechange = function() {
if (req.readyState == 4) {// completed
if (req.status < 400) {// only if "OK"
try {
callback(true, req, cookie);
} catch(err) {
}
} else {
// PRO_log("There was a problem loading data :\n" + req.status+ "/" + req.statusText);
callback(false, req, cookie);
}
setTimeout(function() {req.forceClean();req = null;}, 1000);
}
}
try {
req.open("GET", url);
req.setRequestHeader( "User-Agent", userAgent);
if(lastModify.length > 0)
req.setRequestHeader( "If-Modified-Since", lastModify);
req.send(null);
} catch(err){
}
return req;
}
// escape the url
function encodeURL(url)
{
return escape(url).replace(/\+/g, '%2B').replace(/\"/g, '%22').replace(/\'/g, '%27');
}
function menuShowGoogleResult(cookie,url) {
PRO_openInTab("http://google.com/search?&q=site:"+url,1);
}
function menuShowGoogleRelated(cookie,url) {
PRO_openInTab("http://www.google.com/search?q=related:"+url,1);
}
function menuShowAlexaOverview(cookie,url) {
var urlhost = url.split("/");
var qhost = urlhost[2];
PRO_openInTab("http://www.alexa.com/data/details/main?q=&url="+qhost,1);
}
function menuShowAlexaTraffic(cookie,url) {
var urlhost = url.split("/");
var qhost = urlhost[2];
PRO_openInTab("http://www.alexa.com/data/details/traffic_details?q=&url="+qhost,1);
}
function handlePageChange(cookie, url, state) {
if(state == 1) {// page loading
var re = /http:\/\/(.*)/i;
var urlhost = url.split("/");
var qhost = urlhost[2];
gCookie = cookie;
gAlexaRank = "";
gGoogleRank = "";
var encodeurl = encodeURL(qhost);
var queryurl = "http://xml.alexa.com/data?cli=10&dat=nsa&ver=quirk-searchstatus&uid=20060101000000&userip=126.12.3.4&url=" + encodeurl;
reqObj.request(processAlexaData, cookie, queryurl, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; Alexa Toolbar)", "Thu, 26 Aug 2002 08:24:16 GMT");
var encodeurl2 = encodeURL(url);
var reqgr = "info:" + url;
var reqgre = "info:" + encodeurl2.replace( "_", "%5F" );
var gGoogleCHCalc = new googlechcalc();
var mGoogleCH = gGoogleCHCalc.googleCH( gGoogleCHCalc.strord( reqgr ) );
mGoogleCH = "6" + gGoogleCHCalc.googleNewCh( mGoogleCH );
queryurl = "http://toolbarqueries.google.com/search?client=navclient-auto&ch=" + mGoogleCH + "&ie=UTF-8&oe=UTF-8&features=Rank&q=" + reqgre;
// PRO_log(queryurl);
reqObj.request(processGoogleData, cookie, queryurl, "User-Agent", "Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)");
} else if(state == 2) {// page loaded
}
}
function processAlexaData(isOK, req, cookie) {
if(gCookie == cookie) {
gAlexaRank = "0";
if(isOK) {
try {
var re = /POPULARITY.*TEXT=\"(\d+)\"\/\>/i;
var alexaRank = req.responseText.match(re);
gAlexaRank = alexaRank[1];
} catch(e) {}
}
if(gGoogleRank.length > 0) {
processResult();
}
}
}
function processGoogleData(isOK, req, cookie) {
if(gCookie == cookie) {
gGoogleRank = "0";
if(isOK) {
try {
var re = /Rank_.*?:.*?:(\d+)/i;
var googleRank = req.responseText.match(re);
gGoogleRank = googleRank[1];
} catch(e) {}
}
if(gAlexaRank.length > 0) {
processResult();
}
}
}
function processResult()
{
plugin.setStatusInfo("", "Alexa:"+FormatInteger(gAlexaRank)+" Google:" + gGoogleRank + "/10", "", gCookie);
}
function googlechcalc() {
return this;
}
googlechcalc.prototype =
{
googleNewCh: function( ch )
{
ch = ( ( ( ch / 7 ) << 2 ) | ( ( this.myfmod( ch,13 ) ) & 7 ) );
prbuf = new Array();
prbuf[0] = ch;
for( i = 1; i < 20; i++ )
{
prbuf[i] = prbuf[i-1] - 9;
}
ch = this.googleCH( this.c32to8bit( prbuf ), 80 );
return ch;
},
googleCH: function( url )
{
var init = 0xE6359A60;
var length = url.length;
var a = 0x9E3779B9;
var b = 0x9E3779B9;
var c = 0xE6359A60;
var k = 0;
var len = length;
var mixo = new Array();
while( len >= 12 )
{
a += (url[k+0] +(url[k+1]<<8) +(url[k+2]<<16) +(url[k+3]<<24));
b += (url[k+4] +(url[k+5]<<8) +(url[k+6]<<16) +(url[k+7]<<24));
c += (url[k+8] +(url[k+9]<<8) +(url[k+10]<<16)+(url[k+11]<<24));
mixo = this.mix(a,b,c);
a = mixo[0]; b = mixo[1]; c = mixo[2];
k += 12;
len -= 12;
}
c += length;
switch( len )
{
case 11:
c += url[k+10]<<24;
case 10:
c+=url[k+9]<<16;
case 9 :
c+=url[k+8]<<8;
case 8 :
b+=(url[k+7]<<24);
case 7 :
b+=(url[k+6]<<16);
case 6 :
b+=(url[k+5]<<8);
case 5 :
b+=(url[k+4]);
case 4 :
a+=(url[k+3]<<24);
case 3 :
a+=(url[k+2]<<16);
case 2 :
a+=(url[k+1]<<8);
case 1 :
a+=(url[k+0]);
}
mixo = this.mix( a, b, c );
if( mixo[2] < 0 )
{
return ( 0x100000000 + mixo[2] );
}
else
{
return mixo[2];
}
},
hexdec: function( str )
{
return parseInt( str, 16 );
},
zeroFill: function( a, b )
{
var z = this.hexdec( 80000000 );
if( z & a )
{
a = a >> 1;
a &= ~z;
a |= 0x40000000;
a = a >> ( b - 1 );
}
else
{
a = a >> b;
}
return (a);
},
mix: function( a, b, c )
{
a -= b; a -= c; a ^= ( this.zeroFill( c, 13 ) );
b -= c; b -= a; b ^= ( a << 8 );
c -= a; c -= b; c ^= ( this.zeroFill( b, 13 ) );
a -= b; a -= c; a ^= ( this.zeroFill( c, 12 ) );
b -= c; b -= a; b ^= ( a << 16);
c -= a; c -= b; c ^= ( this.zeroFill( b, 5 ) );
a -= b; a -= c; a ^= ( this.zeroFill( c, 3 ) );
b -= c; b -= a; b ^= ( a << 10);
c -= a; c -= b; c ^= ( this.zeroFill( b, 15 ) );
var ret = new Array( (a), (b), (c) );
return ret;
},
strord: function( string )
{
var result = new Array();
for( i = 0; i < string.length; i++ )
{
result[i] = string.charCodeAt( i);
}
return result;
},
c32to8bit: function( arr32 )
{
var arr8 = new Array();
for( i = 0; i < arr32.length; i++ )
{
for( bitOrder = i * 4; bitOrder <= i * 4 + 3; bitOrder++ )
{
arr8[bitOrder] = arr32[i] & 255;
arr32[i] = this.zeroFill( arr32[i], 8 );
}
}
return arr8;
},
myfmod: function( x, y )
{
var i = Math.floor( x / y );
return ( x - i * y );
}
};
function FormatInteger( integer )
{
var pattern = "###,###,###,###";
var result = '';
integerIndex = integer.length - 1;
patternIndex = pattern.length - 1;
while( ( integerIndex >= 0 ) && ( patternIndex >= 0 ) )
{
var digit = integer.charAt( integerIndex );
integerIndex--;
// Skip non-digits from the source integer (eradicate current formatting).
if( ( digit < '0' ) || ( digit > '9') ) continue;
// Got a digit from the integer, now plug it into the pattern.
while( patternIndex >= 0 )
{
var patternChar = pattern.charAt( patternIndex );
patternIndex--;
// Substitute digits for '#' chars, treat other chars literally.
if( patternChar == '#' )
{
result = digit + result;
break;
}
else
{
result = patternChar + result;
}
}
}
return result;
}
}
)();